// 引入内置模块：http（创建服务）、fs（文件流）、path（处理文件路径）
const http = require('http');
const fs = require('fs');
const path = require('path');

// 1. 定义文件路径（使用path.resolve确保跨系统路径正确）
const dataFilePath = path.resolve(__dirname, 'data.txt');

// 2. 创建HTTP服务
const server = http.createServer((req, res) => {
  // 仅处理根路径请求（localhost:8081/）
  if (req.url === '/' && req.method === 'GET') {
    // 检查data.txt是否存在
    fs.access(dataFilePath, fs.constants.F_OK, (err) => {
      if (err) {
        // 文件不存在：返回404错误
        res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });
        res.end('❌ 未找到data.txt文件，请先创建该文件');
        return;
      }

      // 文件存在：创建可读流
      const readStream = fs.createReadStream(dataFilePath, { encoding: 'utf8' });

      // 设置响应头：告诉浏览器返回的是文本，编码为utf8
      res.writeHead(200, { 
        'Content-Type': 'text/plain; charset=utf-8',
        'X-Content-Source': 'Node.js Stream' // 自定义头，标识流响应
      });

      // 管道连接：文件流 → HTTP响应流（直接将流数据响应到浏览器）
      readStream.pipe(res);

      // 监听流错误（如文件读取中断）
      readStream.on('error', (err) => {
        res.writeHead(500, { 'Content-Type': 'text/plain; charset=utf-8' });
        res.end(`❌ 服务器读取文件失败：${err.message}`);
      });

      // 监听响应完成事件
      res.on('finish', () => {
        console.log(`✅ 已向客户端响应data.txt内容（流方式）`);
      });
    });
  } else {
    // 非根路径：返回404
    res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });
    res.end('❌ 页面未找到，请访问：localhost:8081');
  }
});

// 3. 启动服务，监听8081端口
const port = 8081;
server.listen(port, () => {
  console.log(`🚀 HTTP服务已启动！请在浏览器访问：http://localhost:${port}`);
});